home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / Statement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  5.1 KB  |  207 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.Label;
  7. import sun.tools.java.ClassDefinition;
  8. import sun.tools.java.CompilerError;
  9. import sun.tools.java.Environment;
  10. import sun.tools.java.Identifier;
  11. import sun.tools.java.Type;
  12.  
  13. public class Statement extends Node {
  14.    public static final long DEAD_END = 1L << 63;
  15.    Identifier[] labels;
  16.  
  17.    Statement(int var1, int var2) {
  18.       super(var1, var2);
  19.    }
  20.  
  21.    public void setLabel(Environment var1, Expression var2) {
  22.       if (var2.op == 60) {
  23.          if (this.labels == null) {
  24.             this.labels = new Identifier[1];
  25.          } else {
  26.             Identifier[] var3 = new Identifier[this.labels.length + 1];
  27.             System.arraycopy(this.labels, 0, var3, 1, this.labels.length);
  28.             this.labels = var3;
  29.          }
  30.  
  31.          this.labels[0] = ((IdentifierExpression)var2).id;
  32.       } else {
  33.          var1.error(var2.where, "invalid.label");
  34.       }
  35.    }
  36.  
  37.    public long checkMethod(Environment var1, Context var2, long var3, Hashtable var5) {
  38.       var3 = this.check(var1, var2, var3, var5);
  39.       if (!var2.field.getType().getReturnType().isType(11) && (var3 & DEAD_END) == 0L) {
  40.          var1.error(var2.field.getWhere(), "return.required.at.end", var2.field);
  41.       }
  42.  
  43.       return var3;
  44.    }
  45.  
  46.    long checkDeclaration(Environment var1, Context var2, long var3, int var5, Type var6, Hashtable var7) {
  47.       throw new CompilerError("checkDeclaration");
  48.    }
  49.  
  50.    long check(Environment var1, Context var2, long var3, Hashtable var5) {
  51.       throw new CompilerError("check");
  52.    }
  53.  
  54.    long reach(Environment var1, long var2) {
  55.       if ((var2 & DEAD_END) != 0L) {
  56.          if (var1.warnings()) {
  57.             var1.error(super.where, "stat.not.reached");
  58.          }
  59.  
  60.          var2 &= ~DEAD_END;
  61.       }
  62.  
  63.       return var2;
  64.    }
  65.  
  66.    public Statement inline(Environment var1, Context var2) {
  67.       return this;
  68.    }
  69.  
  70.    public Statement eliminate(Environment var1, Statement var2) {
  71.       if (var2 != null && this.labels != null) {
  72.          Statement[] var3 = new Statement[]{(Statement)var2};
  73.          var2 = new CompoundStatement(super.where, var3);
  74.          ((Statement)var2).labels = this.labels;
  75.       }
  76.  
  77.       return (Statement)var2;
  78.    }
  79.  
  80.    public void code(Environment var1, Context var2, Assembler var3) {
  81.       throw new CompilerError("code");
  82.    }
  83.  
  84.    void codeFinally(Environment var1, Context var2, Assembler var3, Context var4, Type var5) {
  85.       Integer var6 = null;
  86.       boolean var7 = false;
  87.       boolean var8 = false;
  88.  
  89.       for(Context var9 = var2; var9 != null && var9 != var4; var9 = var9.prev) {
  90.          if (var9.node != null) {
  91.             if (var9.node.op == 126) {
  92.                var7 = true;
  93.             } else if (var9.node.op == 103) {
  94.                var7 = true;
  95.                FinallyStatement var10 = (FinallyStatement)var9.node;
  96.                if (!var10.finallyFinishes) {
  97.                   var8 = true;
  98.                   break;
  99.                }
  100.             }
  101.          }
  102.       }
  103.  
  104.       if (var7) {
  105.          if (var5 != null) {
  106.             ClassDefinition var13 = var2.field.getClassDefinition();
  107.             if (!var8) {
  108.                LocalField var11 = new LocalField(super.where, var13, 0, var5, (Identifier)null);
  109.                var6 = new Integer(var2.declare(var1, var11));
  110.                var3.add(super.where, 54 + var5.getTypeCodeOffset(), var6);
  111.             } else {
  112.                switch (var13.getType().getTypeCode()) {
  113.                   case 5:
  114.                   case 7:
  115.                      var3.add(super.where, 88);
  116.                   case 11:
  117.                      break;
  118.                   default:
  119.                      var3.add(super.where, 87);
  120.                }
  121.             }
  122.          }
  123.  
  124.          for(Context var14 = var2; var14 != null && var14 != var4; var14 = var14.prev) {
  125.             if (var14.node != null) {
  126.                if (var14.node.op == 126) {
  127.                   var3.add(super.where, 168, ((CodeContext)var14).contLabel);
  128.                } else if (var14.node.op == 103) {
  129.                   FinallyStatement var15 = (FinallyStatement)var14.node;
  130.                   Label var12 = ((CodeContext)var14).contLabel;
  131.                   if (!var15.finallyFinishes) {
  132.                      var3.add(super.where, 167, var12);
  133.                      break;
  134.                   }
  135.  
  136.                   var3.add(super.where, 168, var12);
  137.                }
  138.             }
  139.          }
  140.  
  141.          if (var6 != null) {
  142.             var3.add(super.where, 21 + var5.getTypeCodeOffset(), var6);
  143.          }
  144.  
  145.       }
  146.    }
  147.  
  148.    public boolean hasLabel(Identifier var1) {
  149.       Identifier[] var2 = this.labels;
  150.       if (var2 != null) {
  151.          int var3 = var2.length;
  152.  
  153.          while(true) {
  154.             --var3;
  155.             if (var3 < 0) {
  156.                break;
  157.             }
  158.  
  159.             if (var2[var3].equals(var1)) {
  160.                return true;
  161.             }
  162.          }
  163.       }
  164.  
  165.       return false;
  166.    }
  167.  
  168.    public boolean firstConstructor() {
  169.       return false;
  170.    }
  171.  
  172.    public Statement copyInline(Context var1, boolean var2) {
  173.       return (Statement)((Node)this).clone();
  174.    }
  175.  
  176.    public int costInline(int var1) {
  177.       return var1;
  178.    }
  179.  
  180.    void printIndent(PrintStream var1, int var2) {
  181.       for(int var3 = 0; var3 < var2; ++var3) {
  182.          var1.print("    ");
  183.       }
  184.  
  185.    }
  186.  
  187.    public void print(PrintStream var1, int var2) {
  188.       if (this.labels != null) {
  189.          int var3 = this.labels.length;
  190.  
  191.          while(true) {
  192.             --var3;
  193.             if (var3 < 0) {
  194.                break;
  195.             }
  196.  
  197.             var1.print(this.labels[var3] + ": ");
  198.          }
  199.       }
  200.  
  201.    }
  202.  
  203.    public void print(PrintStream var1) {
  204.       this.print(var1, 0);
  205.    }
  206. }
  207.